#ifndef __MY__UTIL__ 
#define __MY__UTIL__
#include <string>
#include <sys/types.h>
#include <sys/socket.h>
//工具类
class Util{
public:
    /*
    Http报文，换行有   \r, \r\n, \n   三种格式
    我们要区分这三种格式的前提下，来获取一行
    */


    static int ReadLine(int sock, std::string *root)
    {
        //获取数据
        char ch = ' ';
        while(ch != '\n')
        {
            size_t s = recv(sock, &ch, 1, 0);   //阻塞式读取,每次只读取一个字符
            if(s > 0)
            {
                //读到了数据
                if(ch == '\r'){
                    //有可能是\r+\n ， 或者\r+数据
                    //先窥探一下，看看下一个字符是什么，不取出来。
                    recv(sock, &ch, 1, MSG_PEEK);   //MSG_PEEK 有窥探功能
                    if(ch == '\n'){   //  \r\n
                        recv(sock, &ch, 1, 0);
                    }
                    else{  //\r+数据   -> 就把\r变成\n，结束循环
                        ch = '\n';
                    }
                }
                
                //到这里，要么是普通数据，要么是\n，是\n就结束了
                root->push_back(ch);
            }
            else if(s== 0)
            {
                //对端关闭连接
                return 0;
            }
            else
            {
                //读取错误
                return -1;
            }

        }
        return root->size();
    }

    static bool CutString(std::string &target, std::string *sub1_out, std::string *sub2_out, std::string sep)
    {
        size_t pos = target.find(sep);
        if(pos!=std::string::npos)
        {
            *sub1_out = target.substr(0, pos);
            *sub2_out = target.substr(pos+sep.size());   //后面不说，默认截到结尾
            return true;
        }
        return false;
    }


};



#endif